import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

class AnimPage2 extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _AnimPage2();
  }
}

class _AnimPage2 extends State<AnimPage2> with TickerProviderStateMixin {
  var w = 100.0;
  var h = 100.0;

  Animation<double> animation;
  Animation<double> animation2;
  AnimationController animationController;

  @override
  void initState() {
    super.initState();
    // 创建 AnimationController，用于控制动画
    // 必须提供动画时间
    animationController = new AnimationController(
        vsync: this, duration: Duration(milliseconds: 1500));
    // 创建一个插值器，关联 AnimationController，返回一个新的 Animation 对象
    animation = Tween<double>(begin: 100.0, end: 100.0 * 2.0)
        .animate(animationController);
    animation2 =
        Tween<double>(begin: 0.0, end: 1.0).animate(animationController);

    animationController.addListener(() {
      // 当动画更新时会调用
      // 需要在这个函数中，调用 setState() 来触发视图刷新
      setState(() {});
    });
    animationController.addStatusListener((status) {
      // if (status == AnimationStatus.completed) {
      //   animationController.reverse();
      // }
      print('status: $status');
    });
    // 开始播放动画
    animationController.forward();
    animationController.repeat(reverse: true);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Anim Demo 2'),
      ),
      body: Container(
        alignment: Alignment.center,
        child: SizedBox(
          // 获取插值器计算出的 value
          // 作为属性值
          width: animation.value,
          height: animation.value,
          child: Container(
            color: Colors.lightBlue.withAlpha((animation2.value * 255).toInt()),
          ),
        ),
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();
    // 动画使用完成后必需要销毁
    animationController.dispose();
  }
}
